using System;
using System.Collections.Generic;
using System.Data;
using MySql.Data.MySqlClient;
using NEX_Datos;
using System.Text;

namespace NEXServicio
{
    public class ServicioEditorial : ServicioPadre
    {
        #region Contantes

        public const String DataTableName = "Editorial";

        #endregion

        #region Metodos Privados

        private static DataSet ListarPrivado(int? idEditorial,int? idLibro, bool completo)
        {
            DataSet ds = new DataSet();
            ds.Locale = System.Globalization.CultureInfo.CurrentCulture;
            using (MySqlCommand cmd = UtilidadAD.CreateSqlCommand())
            {
                cmd.CommandText = "EditorialTraer";

                SetearConNulo("p_idEditorial", cmd, MySqlDbType.Int32, idEditorial);
                SetearConNulo("p_idLibro", cmd, MySqlDbType.Int32, idLibro);
                SetearConNulo("p_completo", cmd, MySqlDbType.Bit, completo);
                
                using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
                {
                    da.Fill(ds);
                    cmd.Connection.Close();
                }
            }
            ds.Tables[0].TableName = ServicioEditorial.DataTableName;
            return ds;
        }

        #endregion

        #region Metodos Publicos

        public static DataSet ListarPorLibro(Int32 idLibro,Boolean completo)
        {
            return ServicioEditorial.ListarPrivado(null, idLibro, completo);
        }

        public static DataSet Obtener(int idEditorial, bool completo)
        {
            DataSet ds = new DataSet();
            ds.Locale = System.Globalization.CultureInfo.CurrentCulture;
            using (MySqlCommand cmd = UtilidadAD.CreateSqlCommand())
            {
                cmd.CommandText = "EditorialTraer";

                SetearConNulo("p_idEditorial", cmd, MySqlDbType.Int32, idEditorial);
                SeteaValorNulo("p_idLibro", cmd, MySqlDbType.Int32);
                SetearConNulo("p_completo", cmd, MySqlDbType.Bit, completo);

                using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
                {
                    da.Fill(ds);
                }
            }
            ds.Tables[0].TableName = ServicioEditorial.DataTableName;

            return ds;
        }

        #endregion

        #region Metodos para Salvar

        public static int Salvar(Transaccion transaccion, int idEditorial, string nombre, string isbn, int anio, int paginas, int idLibro, byte[] imagen,string nombreTapaLibro)
        {
            if (transaccion == null)
            {
                throw new ArgumentNullException("transaccion");
            }
            using (MySqlCommand cmd = transaccion.SqlCommandObtener())
            {
                cmd.CommandText = "EditorialSalvar";

                cmd.Parameters.Add("p_idEditorial", MySqlDbType.Int32).Value = idEditorial;
                cmd.Parameters["p_idEditorial"].Direction = ParameterDirection.InputOutput;
                cmd.Parameters.Add("p_nombre", MySqlDbType.VarChar).Value = nombre;
                cmd.Parameters.Add("p_isbn", MySqlDbType.VarChar).Value = isbn;
                cmd.Parameters.Add("p_anio", MySqlDbType.Int32).Value = anio;
                cmd.Parameters.Add("p_paginas", MySqlDbType.Int32).Value = paginas;
                cmd.Parameters.Add("p_idLibro", MySqlDbType.Int32).Value = idLibro;
                //cmd.Parameters.Add("p_tapaLibro", MySqlDbType.Blob).Value = imagen;
                cmd.Parameters.Add("p_tapaLibro", MySqlDbType.Blob).Value = null;
                cmd.Parameters.Add("p_nombreTapaLibro", MySqlDbType.VarChar).Value = nombreTapaLibro;

                cmd.ExecuteNonQuery();
                return (Int32)cmd.Parameters["p_idEditorial"].Value;
            }
        }

        #endregion
    }
}
